/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:张熳
 * Date:2025-08-18
 * Time:0:32
 */
//日期类

public class Data {
    public int year; //默认初始化-即JVM自动设置默认值,该默认值0
    public int month;//默认值0
    public int day = 12; //就地初始化-在声明成员变量时，直接给初始值

    //写一个方法来设置 年月日
    public void setData(Data this,int year,int month,int day){  //第一个参数Data this可写可不写，一般不写
        this.year = year;
        this.month = month;
        this.day = day;
        //this.printData();//this除了上面可以访问成员变量外，还可以访问非静态的成员方法
    }

    //创建打印年月日的方法
    public void printData(Data this){  //这个也是可写可不写，一般不写
        System.out.println(this.year + "年 " + this.month + "月 " + this.day + "日 ");//这里的this建议写

        //this.setData() ;//但是this不能互相访问成员方法，否则会陷入循环。例如，this.printData();和this.setData();互相访问不可以
    }

    //构造方法（可以构成重载）
    public Data(){
        //无参构造方法--内部给各个成员赋值初始值，该部分功能与三个参数的构造方法重复
        //因此可以在无参构造方法中通过this调用带有三个参数的构造方法

        //System.out.println(year);//this();必须是构造方法的第一条语句，否则会编译失败，因此要注释掉这一行
        this(2011,11,11);
        /*this.year = 2011;
        this.month = 11;
        this.day = 11;*/

        //System.out.println("这是个不带参数的构造方法.....");
    }

    public Data(int year,int month,int day){
        //this(); 也是一样不能互相调用this(...); 否则会陷入循环
         this.year = year;
         this.month = month;
         this.day = day;
        System.out.println("调用了带有3个参数的构造方法...");
    }

    //创建构造方法的时候，要自己一个一个的写参数，有一个快捷键可以帮助快速的创建一个合适的构造方法
    //右键选择 Generate -> Constructor -> 选择要创建几个参数（无参的或者有参的）
    //例如，选择创建三个参数的构造方法：
    /*public Data(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }*/

    public static void main(String[] args) {
        //Data data = new Data();//构造方法是在实例化对象的时候被调用的，这个调用的是无参数的构造方法
        //Data data = new Data(2012,12,12);//实例化对象的时候可以借助构造方法初始化，调用的是有3个参数的构造方法
        Data data = new Data();//通过this调用有参数的构造方法对无参数构造方法进行初始化
        data.printData();
    }

    //类和this
    public static void main1(String[] args) {
        //创建三个日期类
        Data data1 = new Data();
        Data data2 = new Data();
        Data data3 = new Data();

        //设置日期
        data1.setData(2008,8,8);
        data2.setData(2009,9,9);
        data3.setData(2010,10,10);

        //打印日期中的内容
        data1.printData();
        data2.printData();
        data3.printData();

        // System.out.println(this.year);   this不能在静态方法中使用
    }
}
